#! /usr/bin/env python3
import os
import sys
import logging
import pandas as pd

logging.basicConfig(level=logging.DEBUG,
                    format='[%(levelname)s] %(message)s'
                    )

def example1():
    data = {
        '姓名': ['张三', '李四', '王五'],
        '年龄': [25, 30, 28],
        '城市': ['北京', '上海', '广州']
    }

    df = pd.DataFrame(data)
    print(df)


def example2():
    data = {
        '姓名': ['张三', '李四', '王五'],
        '年龄': [25, 30, 28],
        '城市': ['北京', '上海', '广州']
    }

    df = pd.DataFrame(data, index=['a', 'b', 'c'])
    print(df)

def example3():
    logging.info("example-3")
    data = {
        '姓名': ['张三', '李四', '王五'],
        '年龄': [25, 30, 28],
        '城市': ['北京', '上海', '广州']
    }

    df = pd.DataFrame(data, index=['a', 'b', 'c'])

    # 单列 → 返回Series
    ages = df['年龄']  
    print(ages)
    print('\n')
    # 多列 → 返回DataFrame
    subset = df[['姓名', '城市']]  
    print(subset)
    print('\n')

    # new column
    df['年薪'] = [15, 20, 18]  # 直接赋值
    df['收入等级'] = df['年薪'].apply(lambda x: '高' if x >18 else '中')  # 条件赋值
    print(df)

    # change data
    df.loc[df['姓名'] == '张三', '年龄'] = 26  # 修改特定值
    print(df)

    # Delete data
    df.drop(columns=['城市'], inplace=True)  # 删除列
    df.drop(index=['a'], inplace=True)      # 删除行
    print(df)


def example4():
    # 创建含缺失值的示例
    df = pd.DataFrame({'A': [1, None, 3], 'B': [None, 5, 6]})
    print(df)
    print('\n')

    # 填充缺失值
    df.fillna(0, inplace=True)  # 填充为0
    print(df)
    print('\n')


# pd.concat() instead pd.append()
# 如果需要处理大规模数据追加，建议先将所有新行存入列表，最后用 pd.concat() 一次性合并，比逐行添加效率高10倍以上。
def example5():
    data = {
        '姓名': ['张三', '李四', '王五'],
        '年龄': [25, 30, 28],
        '城市': ['北京', '上海', '广州']
    }
    df = pd.DataFrame(data, index=['a', 'b', 'c'])
    print(df)
    print('\n')

    # 将新行转为DataFrame
    new_row_df = pd.DataFrame([['钱七', 40, '杭州']], columns=df.columns)

    # 纵向拼接
    df = pd.concat([df, new_row_df], ignore_index=True)
    print(df)
    print('\n')

    # 通过字典创建新行并合并
    df = pd.concat([
        df,
        pd.DataFrame.from_records([{'姓名': '孙八', '城市': '成都'}])
    ], ignore_index=True)
    print(df)
    print('\n')


def example6():
    data = {
        '姓名': ['张三', '李四', '王五'],
        '年龄': [25, 30, 28],
        '城市': ['北京', '上海', '广州']
    }
    df = pd.DataFrame(data)
    # 将新行转为DataFrame
    new_row_df = pd.DataFrame([['钱七', 40, '杭州']], columns=df.columns)
    # 纵向拼接
    df = pd.concat([df, new_row_df], ignore_index=True)

    for idx in df.index:
        row_data = df.loc[idx]
        print(f'{idx}: {row_data["姓名"]}')

    df.at[1, '年龄'] = 100  # 1 is index
    print(df)


    

if __name__ == "__main__":
    logging.critical("Hello dataframe")
    example6()
    
